#include "gui_button.h"
#include "color.h"
#include "event.h"
#include <SDL.h>

Button::Button(const Font &font, int X, int Y, int W, int H, std::wstring text) : Widget()
{
	SetFont(font);
	_text = text;
	SetPos(X,Y);
	SetSize(W,H);
	_align = CENTER_MIDDLE;

	_img1 = NULL;
	_img2 = NULL;
	_img3 = NULL;
}

Button::~Button()
{
	_clearimg();
}

void Button::SetImage(Image *img1, Image *img2, Image *img3)
{
	_clearimg();
	_img1 = img1;
	_img2 = img2;
	_img3 = img3;
}

void Button::SetImage(std::string file1, std::string file2, std::string file3)
{
	_clearimg();
	_img1 = new Image(file1);
	_img2 = new Image(file2);
	_img3 = new Image(file3);
}

void Button::SetStyle(ButtonStyle style)
{
	_style = style;
	
	if (_style == BUTTON_3D)
	{
//		Bitmap *_bitmap = new Bitmap(_area.size.x, _area.size.y);
//		_bitmap->ClearToColor(Color(SILVER));

		_clearimg();
		SDL_Rect fillrect;
		Color lclr = Color(GREEN) + Color(DARK_GREY);
		Color dclr = Color(GREEN) - Color(DARK_GREY);
//		Uint32 color1=SDL_MapRGB(_bitmap->GetSDLSurface()->format,lclr.r,lclr.g,lclr.b);
//		Uint32 color2=SDL_MapRGB(_bitmap->GetSDLSurface()->format,dclr.r,dclr.g,dclr.b);

//		fillrect.x=0; fillrect.y=0;
//		fillrect.w=_bitmap->GetSize().x; fillrect.h=2;
//		SDL_FillRect(_bitmap->GetSDLSurface(),&fillrect,color2);
		
//		fillrect.y=_bitmap->GetSize().y-2;
//		SDL_FillRect(_bitmap->GetSDLSurface(),&fillrect,color1);
		
//		fillrect.x=0; fillrect.y=0;
//		fillrect.w=2; _bitmap->GetSize().y;
//		SDL_FillRect(_bitmap->GetSDLSurface(),&fillrect,color2);
		
		//fillrect.x=_bitmap->GetSize().x-2;
		//SDL_FillRect(_bitmap->GetSDLSurface(),&fillrect,color1);
		//
		//fillrect.h=1; fillrect.w=1;
		//SDL_FillRect(_bitmap->GetSDLSurface(),&fillrect,color2);
		//
		//fillrect.x=1;
		//fillrect.y=_bitmap->GetSize().y-1;
		//SDL_FillRect(_bitmap->GetSDLSurface(),&fillrect,color1);
		//
		//_img1 = new Image(*_bitmap);
		//delete _bitmap;
	}
}

void Button::Draw()
{
	int mx,my;
	GetMousePos(&mx,&my);

	if (_mouseselect == Left)
	{
		_drawimg(2);
		_font->PrintRect(_area.position.x+1, _area.position.y+1,
			_area.size.x, _area.size.y, _align, _text);
	}
	else
	{
		if (IsContainsPoint(mx,my) == true)
			_drawimg(3);
		else
			_drawimg(1);
		_font->PrintRect(_area.position.x, _area.position.y,
			_area.size.x, _area.size.y, _align, _text);
	}
}

void Button::_clearimg()
{
	if (_img1 != NULL)
	{
		delete _img1;
		_img1 = NULL;
	}
	if (_img2 != NULL)
	{
		delete _img1;
		_img2 = NULL;
	}
	if (_img3 != NULL)
	{
		delete _img1;
		_img3 = NULL;
	}
}

void Button::_drawimg(int n_spr)
{
	if (n_spr < 1 || n_spr > 3)
		n_spr = 1;
	
	if (n_spr == 1)
	{
		if (_img1 != NULL)
			_img1->DrawStretch(_area.position.x, _area.position.y, _area.size.x, _area.size.y);
		else
			return;
	}
	else if (n_spr == 2)
	{
		if (_img2 != NULL)
			_img2->DrawStretch(_area.position.x, _area.position.y, _area.size.x, _area.size.y);
		else
			_drawimg(1);
	}
	else
	{
		if (_img3 != NULL)
			_img3->DrawStretch(_area.position.x, _area.position.y, _area.size.x, _area.size.y);
		else
			_drawimg(1);
	}
}